/*
 * Copyright 2018 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1beta1/common.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers.h>
#else
 #import "GPBProtocolBuffers.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

CF_EXTERN_C_BEGIN

@class GCFSTransactionOptions_ReadOnly;
@class GCFSTransactionOptions_ReadWrite;
@class GPBTimestamp;

NS_ASSUME_NONNULL_BEGIN

#pragma mark - GCFSCommonRoot

/**
 * Exposes the extension registry for this file.
 *
 * The base class provides:
 * @code
 *   + (GPBExtensionRegistry *)extensionRegistry;
 * @endcode
 * which is a @c GPBExtensionRegistry that includes all the extensions defined by
 * this file and all files that it depends on.
 **/
@interface GCFSCommonRoot : GPBRootObject
@end

#pragma mark - GCFSDocumentMask

typedef GPB_ENUM(GCFSDocumentMask_FieldNumber) {
  GCFSDocumentMask_FieldNumber_FieldPathsArray = 1,
};

/**
 * A set of field paths on a document.
 * Used to restrict a get or update operation on a document to a subset of its
 * fields.
 * This is different from standard field masks, as this is always scoped to a
 * [Document][google.firestore.v1beta1.Document], and takes in account the dynamic nature of [Value][google.firestore.v1beta1.Value].
 **/
@interface GCFSDocumentMask : GPBMessage

/**
 * The list of field paths in the mask. See [Document.fields][google.firestore.v1beta1.Document.fields] for a field
 * path syntax reference.
 **/
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *fieldPathsArray;
/** The number of items in @c fieldPathsArray without causing the array to be created. */
@property(nonatomic, readonly) NSUInteger fieldPathsArray_Count;

@end

#pragma mark - GCFSPrecondition

typedef GPB_ENUM(GCFSPrecondition_FieldNumber) {
  GCFSPrecondition_FieldNumber_Exists = 1,
  GCFSPrecondition_FieldNumber_UpdateTime = 2,
};

typedef GPB_ENUM(GCFSPrecondition_ConditionType_OneOfCase) {
  GCFSPrecondition_ConditionType_OneOfCase_GPBUnsetOneOfCase = 0,
  GCFSPrecondition_ConditionType_OneOfCase_Exists = 1,
  GCFSPrecondition_ConditionType_OneOfCase_UpdateTime = 2,
};

/**
 * A precondition on a document, used for conditional operations.
 **/
@interface GCFSPrecondition : GPBMessage

/** The type of precondition. */
@property(nonatomic, readonly) GCFSPrecondition_ConditionType_OneOfCase conditionTypeOneOfCase;

/**
 * When set to `true`, the target document must exist.
 * When set to `false`, the target document must not exist.
 **/
@property(nonatomic, readwrite) BOOL exists;

/**
 * When set, the target document must exist and have been last updated at
 * that time.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *updateTime;

@end

/**
 * Clears whatever value was set for the oneof 'conditionType'.
 **/
void GCFSPrecondition_ClearConditionTypeOneOfCase(GCFSPrecondition *message);

#pragma mark - GCFSTransactionOptions

typedef GPB_ENUM(GCFSTransactionOptions_FieldNumber) {
  GCFSTransactionOptions_FieldNumber_ReadOnly = 2,
  GCFSTransactionOptions_FieldNumber_ReadWrite = 3,
};

typedef GPB_ENUM(GCFSTransactionOptions_Mode_OneOfCase) {
  GCFSTransactionOptions_Mode_OneOfCase_GPBUnsetOneOfCase = 0,
  GCFSTransactionOptions_Mode_OneOfCase_ReadOnly = 2,
  GCFSTransactionOptions_Mode_OneOfCase_ReadWrite = 3,
};

/**
 * Options for creating a new transaction.
 **/
@interface GCFSTransactionOptions : GPBMessage

/** The mode of the transaction. */
@property(nonatomic, readonly) GCFSTransactionOptions_Mode_OneOfCase modeOneOfCase;

/** The transaction can only be used for read operations. */
@property(nonatomic, readwrite, strong, null_resettable) GCFSTransactionOptions_ReadOnly *readOnly;

/** The transaction can be used for both read and write operations. */
@property(nonatomic, readwrite, strong, null_resettable) GCFSTransactionOptions_ReadWrite *readWrite;

@end

/**
 * Clears whatever value was set for the oneof 'mode'.
 **/
void GCFSTransactionOptions_ClearModeOneOfCase(GCFSTransactionOptions *message);

#pragma mark - GCFSTransactionOptions_ReadWrite

typedef GPB_ENUM(GCFSTransactionOptions_ReadWrite_FieldNumber) {
  GCFSTransactionOptions_ReadWrite_FieldNumber_RetryTransaction = 1,
};

/**
 * Options for a transaction that can be used to read and write documents.
 **/
@interface GCFSTransactionOptions_ReadWrite : GPBMessage

/** An optional transaction to retry. */
@property(nonatomic, readwrite, copy, null_resettable) NSData *retryTransaction;

@end

#pragma mark - GCFSTransactionOptions_ReadOnly

typedef GPB_ENUM(GCFSTransactionOptions_ReadOnly_FieldNumber) {
  GCFSTransactionOptions_ReadOnly_FieldNumber_ReadTime = 2,
};

typedef GPB_ENUM(GCFSTransactionOptions_ReadOnly_ConsistencySelector_OneOfCase) {
  GCFSTransactionOptions_ReadOnly_ConsistencySelector_OneOfCase_GPBUnsetOneOfCase = 0,
  GCFSTransactionOptions_ReadOnly_ConsistencySelector_OneOfCase_ReadTime = 2,
};

/**
 * Options for a transaction that can only be used to read documents.
 **/
@interface GCFSTransactionOptions_ReadOnly : GPBMessage

/**
 * The consistency mode for this transaction. If not set, defaults to strong
 * consistency.
 **/
@property(nonatomic, readonly) GCFSTransactionOptions_ReadOnly_ConsistencySelector_OneOfCase consistencySelectorOneOfCase;

/**
 * Reads documents at the given time.
 * This may not be older than 60 seconds.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *readTime;

@end

/**
 * Clears whatever value was set for the oneof 'consistencySelector'.
 **/
void GCFSTransactionOptions_ReadOnly_ClearConsistencySelectorOneOfCase(GCFSTransactionOptions_ReadOnly *message);

NS_ASSUME_NONNULL_END

CF_EXTERN_C_END

#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)
